#include <bits/stdc++.h>
using namespace std;
#define int long long

int n, k, ans[200005], mx, mn, sz, frc[200005], inv[200005];
const int p = 998244353;
bool vis[200005];
vector<pair<int, int>> edges[200005];

void solve(int i, int f) {
	mx = max(mx, i);
	mn = min(mn, i);
	++sz;
	vis[i] = 1;
	for (auto j : edges[i]) {
		if (!vis[j.first] && !(f & (1 << j.second - 1))) solve(j.first, f);
	}
}

int C(int n, int m) {
	return frc[n] * inv[m] % p * inv[n - m] % p;
}
signed main() {
	freopen("soft.in", "r", stdin); freopen("soft.out", "w", stdout);
	ios::sync_with_stdio(0); cin.tie(0);
	cin >> n >> k;
	bool flg1 = 1;
	for (int i = 1; i < n; ++i) {
		int u, v;
		cin >> u >> v;
		flg1 &= (v == u + 1);
		edges[u].push_back({v, i});
		edges[v].push_back({u, i});
	}
	if (n <= 8) {
		for (int i = 0; i < (1 << (n - 1)); ++i) {
			memset(vis, 0, sizeof(vis));
			int tmp = 1;
			for (int j = 1; j <= n; ++j) {
				if (!vis[j]) {
					mx = sz = 0; mn = 1ll << 60;
					solve(j, i);
					if (mx - mn + 1 == sz);
					else tmp = 0;
				}
			}
			ans[1 + __builtin_popcount(i)] += tmp;
		}
		for (int i = 1; i <= k; ++i) cout << ans[i] << "\n";
	} else if (flg1) {
		inv[0] = inv[1] = frc[0] = frc[1] = 1;
		for (int i = 2; i <= 200000; ++i) {
			frc[i] = frc[i - 1] * i % p;
			inv[i] = (p - p / i) * inv[p % i] % p;
		}
		for (int i = 2; i <= 200000; ++i) (inv[i] *= inv[i - 1]) %= p;
		for (int i = 1; i <= k; ++i) {
			cout << C(n - 1, i - 1) << "\n"; 
		}
	} else while (k--) puts("1");
	return 0;
}
